package club.service.impl;

import club.dao.BlogMapper;
import club.pojo.Blog;
import club.service.BlogService;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.List;

@Service
@Transactional
public class BlogServiceImpl implements BlogService {

    @Resource
    private BlogMapper blogMapper;

    /**
     * 查询所有博客信息（分页）
     * @param actionTime 操作时间筛选条件，可以为null，表示不按操作时间筛选
     * @param pageNum 当前页码
     * @param pageSize 每页显示条数
     * @return 分页后的博客信息列表
     */
    @Override
    public PageInfo<Blog> findAllBlog(String actionTime, Integer pageNum, Integer pageSize) {
        // 使用PageHelper进行分页设置
        PageHelper.startPage(pageNum, pageSize);
        // 构建查询条件
        EntityWrapper wrapper = new EntityWrapper();
        if (actionTime != null && !"".equals(actionTime)) {
            wrapper.eq("actionTime", actionTime);
        }
        // 查询符合条件的博客列表
        List<Blog> list = blogMapper.selectList(wrapper);
        // 封装为分页对象
        PageInfo<Blog> pageInfo = new PageInfo<>(list);
        return pageInfo;
    }

    /**
     * 添加新的博客
     * @param blog 待添加的博客对象
     * @return 插入操作影响的行数，通常为1
     */
    @Override
    public int add(Blog blog) {
        // 执行插入操作
        return blogMapper.insert(blog);
    }

    /**
     * 根据博客ID查询博客信息
     * @param id 博客ID
     * @return 对应ID的博客信息，若不存在则返回null
     */
    @Override
    public Blog findById(Integer id) {
        // 根据ID查询博客信息
        return blogMapper.selectById(id);
    }

    /**
     * 更新博客信息
     * @param blog 待更新的博客对象
     * @return 更新操作影响的行数，通常为1
     */
    @Override
    public int updateBlog(Blog blog) {
        // 执行更新操作
        return blogMapper.updateById(blog);
    }

    /**
     * 删除博客信息
     * @param id 待删除博客的ID
     * @return 删除操作影响的行数，通常为1
     */
    @Override
    public int del(Integer id) {
        // 执行删除操作
        return blogMapper.deleteById(id);
    }

    /**
     * 查询所有博客信息（分页，带参数）
     * @param pageNum 当前页码
     * @param pageSize 每页显示条数
     * @return 分页后的博客信息列表
     */
    @Override
    public PageInfo<Blog> blogs(Integer pageNum, Integer pageSize) {
        // 使用PageHelper进行分页设置
        PageHelper.startPage(pageNum, pageSize);
        // 查询所有博客列表
        List<Blog> blogs = blogMapper.selectList(null);
        // 封装为分页对象，设置导航页码数为3
        PageInfo<Blog> pageInfo = new PageInfo<>(blogs, 3);
        return pageInfo;
    }
}